/*
* The syntax highlight.
*/

@import "colors/light-syntax";
@import "colors/dark-syntax";

html:not([mode]),
html[mode=light] {
  @include light-syntax;
}

html[mode=dark] {
  @include dark-syntax;
}

@media (prefers-color-scheme: dark) {
  html:not([mode]),
  html[mode=dark] {
    @include dark-syntax;
  }

  html[mode=light] {
    @include light-syntax;
  }
}

/* -- Codes Snippet -- */

$code-radius: 6px;

%code-snippet-bg {
  background: var(--highlight-bg-color);
}

%code-snippet-radius {
  border-radius: $code-radius;
}

%code-snippet-padding {
  padding: 1.2rem;
}

div > pre {
  @extend %code-snippet-bg;
  @extend %code-snippet-radius;
  @extend %code-snippet-padding;
}

.highlighter-rouge {
  @extend %code-snippet-bg;
  @extend %code-snippet-radius;

  color: var(--highlighter-rouge-color);
  margin-top: 0.5rem;
  margin-bottom: 1.2em; /* Override BS Inline-code style */
}

.highlight {
  @extend %code-snippet-radius;
  @extend %code-snippet-bg;

  @at-root figure#{&} {
    @extend %code-snippet-bg;
  }

  overflow: auto;

  pre {
    margin-bottom: 0;
    font-size: $code-font-size;
    line-height: 1.4rem;
    word-wrap: normal; /* Fixed Safari overflow-x */
  }

  table {
    padding: 0;
    border: 0;

    td pre {
      overflow: visible;  /* Fixed iOS safari overflow-x */
      word-break: normal; /* Fixed iOS safari linenos code break */
    }
  }

  td {
    padding: 0;
    border: 0;
  }

  .lineno {
    padding-right: 0.5rem;
    min-width: 2.2rem;
    text-align: right;
    color: var(--highlight-lineno-color);
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    -o-user-select: none;
    user-select: none;
  }

  /* set the dollar sign to non-selectable */
  .gp {
    user-select: none;
  }

} //.highlight

code {
  -webkit-hyphens: none;
  -ms-hyphens: none;
  -moz-hyphens: none;
  hyphens: none;

  &.highlighter-rouge {
    font-size: $code-font-size;
    padding: 3px 5px;
    border-radius: 4px;
    background-color: var(--inline-code-bg);
  }

  @at-root a > &.highlighter-rouge {
    padding-bottom: 0; // show link's underlinke
    color: inherit;
  }

  @at-root a:hover > &.highlighter-rouge {
    border-bottom: none;
  }

  blockquote &.highlighter-rouge {
    color: inherit;
  }
}

td.rouge-code {
  padding: 1.2rem 1.5rem 1.2rem 1rem;

  // Prevent some browser extends from
  // changing the URL string of code block.
  a {
    color: inherit !important;
    border-bottom: none !important;
    pointer-events: none;
  }

}

/* Hide line numbers for default, console, and terminal code snippets */
div {
  &[class^='highlighter-rouge'],
  &.language-plaintext.highlighter-rouge,
  &.language-console.highlighter-rouge,
  &.language-terminal.highlighter-rouge,
  &.nolineno {
    pre.lineno {
      display: none;
    }

    td.rouge-code {
      @extend %code-snippet-padding;
    }
  }
}

.code-header {
  background: var(--code-header-bg);
  border-top-left-radius: $code-radius;
  border-top-right-radius: $code-radius;
  display: flex;
  justify-content: space-between;
  align-items: center;
  line-height: 1.85rem;

  // icons
  i {
    font-size: 1rem;
    color: var(--lang-badge-muted-color);

    &.small {
      font-size: 70%;
    }
  }

  // the label block
  span {
    padding-left: 0.35rem;

    &::after {
      content: attr(text-data);
      font-size: 0.85rem;
      font-weight: 600;
      color: var(--lang-badge-color);
    }

    i {
      margin: 0 0.5rem;
    }

    @at-root [file] #{&} > i {
      position: relative;
      top: 1px; // center the file icon
      margin-left: 0.25rem;
    }

  }

  // clipboard
  button {
    border: 1px solid var(--code-header-bg);
    border-radius: $code-radius;
    padding: 0;
    width: 1.95rem;
    background-color: inherit;

    @extend %cursor-pointer;

    &[timeout] {
      &:hover {
        border-color: var(--clipboard-checked-color);
      }

      i {
        color: var(--clipboard-checked-color);
      }
    }

    &:not([timeout]):hover {
      background-color: rgba(128, 128, 128, 0.37);

      i {
        color: white;
      }
    }

    &:focus {
      outline: none;
    }

  }

}

@media all and (max-width: 576px) {
  .post-content {
    > div[class^='language-'] {
      @include ml-mr(-1.25rem);

      border-radius: 0;

      .highlight {
        padding-left: 0.25rem;
      }

      .code-header {
        border-radius: 0;
        padding-left: 0.4rem;
        padding-right: 0.5rem;
      }
    }
  }
}
